package cxy;

import java.util.*;

/**
 * ACM 模式：
 * - 仅使用 Scanner / System.out
 * - 支持多组用例：以 while (sc.hasNextInt()) 读入 n 开始的一组
 * - 不打印多余内容或空行
 */
public class Main0 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        boolean firstOutput = true;
        while (sc.hasNextInt()) {
            int n = sc.nextInt();
            int[] arr = new int[n];
            for (int i = 0; i < n; i++) arr[i] = sc.nextInt();
            // 若后续没有两个人员编号，则结束
            if (!sc.hasNextInt()) break;
            int a = sc.nextInt();
            if (!sc.hasNextInt()) break;
            int b = sc.nextInt();

            // 1) 定位两名员工下标
            int ia = -1, ib = -1;
            for (int i = 0; i < n; i++) {
                if (arr[i] == a) ia = i;
                if (arr[i] == b) ib = i;
            }

            int answer = 0;
            if (ia == -1 || ib == -1) {
                // 一方不存在：按需定义为 0
                answer = 0;
            } else {
                // 2) 求最低共同主管（LCA）的下标
                int lcaIndex = lowestCommonAncestorIndex(ia, ib);

                // LCA 下标可能对应空位（-1）——例如输入异常；做保护
                if (lcaIndex < 0 || lcaIndex >= n || arr[lcaIndex] == -1) {
                    answer = 0;
                } else {
                    // 3) 统计子树节点数量（不含 LCA 自身）
                    answer = countSubtreeNodesExcludingSelf(arr, n, lcaIndex);
                }
            }

            // 输出（多组之间不加空行）
            if (!firstOutput) {
                // 不额外打印空行；若平台需要换行分隔，可开启下行
                // System.out.println();
            }
            System.out.println(answer);
            firstOutput = false;
        }
        sc.close();
    }

    // 以数组下标为“父链”，求两节点的 LCA 下标
    private static int lowestCommonAncestorIndex(int ia, int ib) {
        HashSet<Integer> up = new HashSet<>();
        int x = ia;
        while (x >= 0) {
            up.add(x);
            if (x == 0) break;
            x = (x - 1) / 2;
        }
        int y = ib;
        while (y >= 0) {
            if (up.contains(y)) return y;
            if (y == 0) break;
            y = (y - 1) / 2;
        }
        return 0; // 若未命中，默认根
    }

    // 统计以 root 为根的子树中节点总数（不含 root 自身；仅统计值 != -1 的结点）
    private static int countSubtreeNodesExcludingSelf(int[] arr, int n, int root) {
        int cnt = 0;
        Deque<Integer> st = new ArrayDeque<>();
        // 从 root 的左右孩子开始
        int l = 2 * root + 1, r = 2 * root + 2;
        if (l < n && arr[l] != -1) st.push(l);
        if (r < n && arr[r] != -1) st.push(r);

        while (!st.isEmpty()) {
            int i = st.pop();
            cnt++;
            int li = 2 * i + 1, ri = 2 * i + 2;
            if (li < n && arr[li] != -1) st.push(li);
            if (ri < n && arr[ri] != -1) st.push(ri);
        }
        return cnt;
    }
}
